/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package muhnes.sizoo.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import muhnes.sizoo.dal.AnimalDao;
import muhnes.sizoo.dal.EspecimenDao;
import muhnes.sizoo.dal.FabricaDAO;
import muhnes.sizoo.dal.UsuarioDao;
import muhnes.sizoo.modelo.Animal;
import muhnes.sizoo.modelo.Especimen;
import muhnes.sizoo.modelo.Usuario;
import org.apache.commons.codec.digest.DigestUtils;

/**
 *
 * @author Nelson Chicas
 */
@ManagedBean(name = "cpanelBean")
@ViewScoped
public class CPanelBean implements Serializable {
    
    @ManagedProperty(value="#{correoBean}")
    private CorreoBean correoBean;
    @ManagedProperty(value="#{usuarioBean}")
    private UsuarioBean usuarioBean;
    @ManagedProperty(value="#{animalBean}")
    private AnimalBean animalBean;
    @ManagedProperty(value="#{especimenBean}")
    private EspecimenBean especimenBean;
    
    private List< Animal > listaAnimales;
    private List< Especimen > listaEspecimenes;
    private List< Usuario > listaUsuarios;
    
    public CPanelBean() {
    }
    
    public void setCorreoBean(CorreoBean correoBean) {
        this.correoBean = correoBean;
    }

    public UsuarioBean getUsuarioBean() {
        return usuarioBean;
    }

    public void setUsuarioBean(UsuarioBean usuarioBean) {
        this.usuarioBean = usuarioBean;
    }
    
    public AnimalBean getAnimalBean() {
        return animalBean;
    }
    
    public void setAnimalBean(AnimalBean animalBean) {
        this.animalBean = animalBean;
    }

    public EspecimenBean getEspecimenBean() {
        return especimenBean;
    }
    
    public void setEspecimenBean(EspecimenBean especimenBean) {
        this.especimenBean = especimenBean;
    }

    public List< Animal > getListaAnimales() {
        if( listaAnimales == null ) {
            AnimalDao dao = FabricaDAO.crearAnimalDao();
            listaAnimales = dao.buscarAnimalesEnRevision();
        }
        return listaAnimales;
    }
    
    public List< Especimen > getListaEspecimenes() {
        if( listaEspecimenes == null ) {
            EspecimenDao dao = FabricaDAO.crearEspecimenDao();
            listaEspecimenes = dao.buscarEspecimenesEnRevision();
        }
        return listaEspecimenes;
    }
    
    public List< Usuario > getListaUsuarios() {
        if( listaUsuarios == null ) {
            UsuarioDao dao = FabricaDAO.crearUsuarioDao();
            listaUsuarios = dao.buscarUsuariosActivos();
        }
        return listaUsuarios;
    }
    
    public void validarAnimal( Animal animal ) {
        animal.setEstado("Activo");
        AnimalDao dao = FabricaDAO.crearAnimalDao();
        dao.actualizar(animal);
        listaAnimales = null;
    }
    
    public void validarEspecimen( Especimen especimen ) {
        especimen.setEstado("Activo");
        EspecimenDao dao = FabricaDAO.crearEspecimenDao();
        dao.actualizar(especimen);
        listaEspecimenes = null;
    }
    
    public void renovarContrasenya( Usuario usuario ) {
        Random random = new Random();
        byte[] fraseBytes = new byte[48];
        random.nextBytes(fraseBytes);
        String frase = DigestUtils.md5Hex( fraseBytes );
        usuario.setFrase(frase);
        
        String contrasenyaMd5 = DigestUtils.md5Hex( usuario.getContrasenya() + frase );
        usuario.setContrasenya( contrasenyaMd5 );
        
        UsuarioDao dao = FabricaDAO.crearUsuarioDao();
        dao.guardar( usuario );
        
        correoBean.setRemitente("Sistema de clasificación de zoología");
        correoBean.setAsunto("Renovación de contraseña");
        correoBean.setContenido("Su nueva contraseña es: " + usuario.getContrasenya());
        correoBean.enviarCorreo(usuario.getCorreousuario());
    }
    
}


